# -*- coding: utf-8 -*-
#当前所属项目：ailearning
#文件名：data_and_model
#当前用户：李峰
#当前时间：2025/9/20 20:41
#模块说明：
# langchain的基本数据结构：消息类型（类似文本，但指定了消息类型：系统、人类、人工智能）、文档（包含一段文本和元数据）
#四种模型介绍
import time
"""
---------------以下是将基本数据结构-----------------------------
# key: sk-7b4f290b1a3e42a1a9a1957fa44eff37
# base_url: https: // dashscope.aliyuncs.com / compatible - mode / v1
# model_list: https: // help.aliyun.com / zh / models - studio / getting - started / models
# help_doc: https: // help.aliyun.com / zh / models - studio / developer - reference / error - code

"""
def message():
    "聊天消息"
    from langchain_openai import ChatOpenAI
    from langchain.schema import HumanMessage,SystemMessage,AIMessage
    llm = ChatOpenAI(model_name='qwen-plus',base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",temperature=0.5,api_key="sk-7b4f290b1a3e42a1a9a1957fa44eff37")
    re =llm.invoke([SystemMessage(content="你是一个很棒的人工智能机器人，用一句话帮助用户知道该吃什么"),HumanMessage(content="我喜欢吃西红柿，应该吃什么呢？")])
    print(re.content)

def document():
    "文档"
    # Document是处理非结构化数据的核心数据结构，其作用贯穿文档加载、处理、存储和检索全流程。
    from langchain.schema import Document
    re=Document(page_content="这是我的文档。它包括了我从其他地方手机的信息",metadata={"my_document_id":123,"my_document_source":"LangChain 论文","my_document_create_time":time.time()})
    # page_content‌：存储原始文本内容（如文件内容、网页文本等）
    # metadata‌：以字典形式保存文档的元信息（如来源路径、作者、创建时间等）
    print(re)
"""
---------------以下是讲模式------------------------
"""
def language_model():
    """语言模式"""
    from langchain_openai import ChatOpenAI
    llm = ChatOpenAI(model_name='qwen-plus',base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",temperature=0.5,api_key="sk-7b4f290b1a3e42a1a9a1957fa44eff37")
    re =llm.invoke("今天是星期几？")
    print(re.content)

def chat_model():
    "聊天模式"
    from langchain_openai import ChatOpenAI
    from langchain.schema import HumanMessage, SystemMessage, AIMessage
    llm = ChatOpenAI(model_name='qwen-plus',base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",temperature=0.5,api_key="sk-7b4f290b1a3e42a1a9a1957fa44eff37")
    re =llm.invoke([SystemMessage(content="你是一个很棒的人工智能机器人，用一句话帮助用户知道该吃什么"),HumanMessage(content="我喜欢吃西红柿，应该吃什么呢？")])
    print(re.content)

def function_model():
    "函数调用模式"
    from langchain_openai import ChatOpenAI
    from langchain.schema import HumanMessage, SystemMessage, AIMessage
    llm = ChatOpenAI(model_name='qwen-plus', base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
                     temperature=0.5, api_key="sk-7b4f290b1a3e42a1a9a1957fa44eff37")
    messages=[SystemMessage(content="你是一个乐于助人的人工智能机器人"), HumanMessage(content="耒阳现在的天气怎样？")]
    function=[{
        "name":"get_current_weather",
        "description":"获取制定位置的当前天气",
        "parameters":{
            "type":"object",
            "properties":{
                "location":{
                    "type":"string",
                    "description":"城市耒阳，例如中国衡阳"
                },
                "unit":{
                    "type":"string",
                    "enum":["celsius","fahrenheit"]
                }
            },
            "required":["location"]
        }
    }]
    output= llm.invoke(input=messages,functions=function)
    print(output)

if __name__ == "__main__":
    message()
    # document()
    # language_model()
    # chat_model()
    # function_model()